package com.jingming.consult.eventbus;


import org.greenrobot.eventbus.EventBus;

/**
 * EventBus 工具类
 * EventBus3.0有四种线程模型，分别是：
 * POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
 * MAIN 表示事件处理函数的线程在主线程(UI)线程，因此在这里不能进行耗时操作。
 * BACKGROUND 表示事件处理函数的线程在后台线程，因此不能进行UI操作。如果发布事件的线程是主线程(UI线程)，那么事件处理函数将会开启一个后台线程，如果果发布事件的线程是在后台线程，那么事件处理函数就使用该线程。
 * ASYNC 表示无论事件发布的线程是哪一个，事件处理函数始终会新建一个子线程运行，同样不能进行UI操作。
 */

public class EventBusUtils {

    /**
     * 在需要接收消息的页面注册
     *
     * @param subscriber
     */
    public static void register(Object subscriber) {
        EventBus.getDefault().register(subscriber);
    }

    /**
     * 接收完之后解除注册
     *
     * @param subscriber
     */
    public static void unRegister(Object subscriber) {
        EventBus.getDefault().unregister(subscriber);
    }

    /**
     * 发送消息
     */
    public static void post(int what, Object msg) {
        EventBus.getDefault().post(new EventBusMessage(what, msg));
    }

    /**
     * 粘性事件   所谓粘性事件，就是在发送事件之后再订阅该事件也能收到该事件。
     * 请注意这里与普通事件的区别，普通事件是先注册在绑定。
     * 接收 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
     *
     * @param what 事件tag
     * @param msg  传递数据
     */
    public static void postSticky(int what, Object msg) {
        EventBus.getDefault().postSticky(new EventBusMessage(what, msg));
    }

    public static void post(int what) {
        post(what, null);
    }

    /**
     * 粘性事件
     */
    public static void postSticky(int what) {
        postSticky(what, null);
    }

    public static EventBusBuild build(int what) {
        return new EventBusBuild(what);
    }

    static EventBus getEventBus() {
        return EventBus.getDefault();
    }

}
